OT: Pocet zaznamu v tabulce v MS SQL

Otázka od: Malecek Ondrej

31. 5. 2004 9:01

Potreboval bych zjistit pocet zaznamu v tabulce v MS SQL serveru. SELECT
COUNT(*) FROM XXX je nepouzitelne z duvodu vysokeho poctu zaznamu. Zrejme se
pocet zaznamu da zjistit jeste nejakym jinym zpusobem, protoze administracni
konzole ho ma k dispozici velmi rychle. Vite nekdo o necem pouzitelnem ?

Diky Ondrej

Odpovedá: Tyslic Jiri

31. 5. 2004 9:02

Ja myslim ze prave ten select count(*) from xxx musi byt velice rychly, protoze
pokud si dobre vzpominam, tak MS SQL tyto zaznamy nebude scitat, ale podiva se
do systemove tabulky, kde je pocet zaznamu pro danou tabulku.
Doufam, ze mluvim pravdu  

Jirka

> -----Original Message-----
> From: Malecek Ondrej [mailto:ondrej.malecek@radom-cz.cz]
> Sent: Monday, May 31, 2004 9:28 AM
> To: delphi-l@clexpert.cz
> Subject: OT: Pocet zaznamu v tabulce v MS SQL
>
>
> Potreboval bych zjistit pocet zaznamu v tabulce v MS SQL
> serveru. SELECT
> COUNT(*) FROM XXX je nepouzitelne z duvodu vysokeho poctu
> zaznamu. Zrejme se pocet zaznamu da zjistit jeste nejakym
> jinym zpusobem, protoze administracni konzole ho ma k
> dispozici velmi rychle. Vite nekdo o necem pouzitelnem ?
>
> Diky Ondrej
>
>
>


Odpovedá: Malecek Ondrej

31. 5. 2004 9:10

Pak delam nekde zasadni chybu, protoze SELECT COUNT(*) FROM XXX na tabulce s
cca 10000000 zaznamu mi trva cca 20 minut, pricemz soucasne nebezi zadny
jiny dotaz.

Ondrej

> -----Puvodni zprava-----
> Od: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]za
> u?ivatele Tyslic Jiri
> Odeslano: 31. kvitna 2004 9:44
> Komu: delphi-l@clexpert.cz
> P?edmit: Re: Pocet zaznamu v tabulce v MS SQL
>
>
> Ja myslim ze prave ten select count(*) from xxx musi byt velice
> rychly, protoze pokud si dobre vzpominam, tak MS SQL tyto zaznamy
> nebude scitat, ale podiva se do systemove tabulky, kde je pocet
> zaznamu pro danou tabulku.
> Doufam, ze mluvim pravdu  
>
> Jirka
>
> > -----Original Message-----
> > From: Malecek Ondrej [mailto:ondrej.malecek@radom-cz.cz]
> > Sent: Monday, May 31, 2004 9:28 AM
> > To: delphi-l@clexpert.cz
> > Subject: OT: Pocet zaznamu v tabulce v MS SQL
> >
> >
> > Potreboval bych zjistit pocet zaznamu v tabulce v MS SQL
> > serveru. SELECT
> > COUNT(*) FROM XXX je nepouzitelne z duvodu vysokeho poctu
> > zaznamu. Zrejme se pocet zaznamu da zjistit jeste nejakym
> > jinym zpusobem, protoze administracni konzole ho ma k
> > dispozici velmi rychle. Vite nekdo o necem pouzitelnem ?
> >
> > Diky Ondrej
> >
> >
> >
>
>
>

Odpovedá: prgx@email.cz

31. 5. 2004 9:18

Mas-li v tabulce definovany klic, nebo aspon jedno oindexovane pole,
tak proved count pres toto pole:

select count(jm_pole) from xxx

a vysledek musi byt skoro okamzite.


Odpovedá: Milan Schembera

31. 5. 2004 9:48

UPDATE STATISTICS je nastaven na automaticky ? Co rika DBCC CHECKDB ? Je
definovan primarni klic ? Co pouzit treba SELECT COUNT(1) AS Pocet FROM
XXX ?


4> -----Original Message-----
4> From: Malecek Ondrej
4>
4> Pak delam nekde zasadni chybu, protoze SELECT COUNT(*) FROM
4> XXX na tabulce s cca 10000000 zaznamu mi trva cca 20 minut,
4> pricemz soucasne nebezi zadny jiny dotaz.



Odpovedá: Tyslic Jiri

31. 5. 2004 9:43

Hmm, tak ted jsem se na to dival znovu a asi jsem teda pekne kecal, protoze
kdyz se podivam na Execution plan toho dotazu, tak vidim, ze prochazi index.
Nicmene na tabulce se 100.000 zaznamy je delka vyhodnoceni okamzita... Tak ted
tedy opravdu nevim... A je na te tabulce nejaky index?

> Pak delam nekde zasadni chybu, protoze SELECT COUNT(*) FROM
> XXX na tabulce s cca 10000000 zaznamu mi trva cca 20 minut,
> pricemz soucasne nebezi zadny jiny dotaz.
>
> Ondrej
>
> >
> > Ja myslim ze prave ten select count(*) from xxx musi byt velice
> > rychly, protoze pokud si dobre vzpominam, tak MS SQL tyto zaznamy
> > nebude scitat, ale podiva se do systemove tabulky, kde je pocet
> > zaznamu pro danou tabulku. Doufam, ze mluvim pravdu  
> >
> > Jirka
> > >
> > > Potreboval bych zjistit pocet zaznamu v tabulce v MS SQL serveru.
> > > SELECT
> > > COUNT(*) FROM XXX je nepouzitelne z duvodu vysokeho poctu
> zaznamu.
> > > Zrejme se pocet zaznamu da zjistit jeste nejakym jinym zpusobem,
> > > protoze administracni konzole ho ma k dispozici velmi
> rychle. Vite
> > > nekdo o necem pouzitelnem ?
> > >
> > > Diky Ondrej
> > >


Odpovedá: Zalesak Tomas

31. 5. 2004 9:44

Pro SELECT COUNT(*) FROM tblXXX pouzije MSSQL nejmensi index
nad tabulkou tblXXX (operace [Clustered] Index Scan v Execution
Planu).

Pokud tabulka nema zadny index, tak musi projit celou tabulku
(operace Table Scan v Execution Planu).

Execution Plan zobrazim v Query Analyzeru via Ctrl+L.


existuje "alternativni" metoda zjisteni poctu zaznamu:

SELECT OBJECT_NAME(id), rows
FROM dbo.sysindexes
WHERE indid BETWEEN 0 AND 1
ORDER BY rows DESC

POZOR - pocty radku v systemove tabulce dbo.sysindexes
nejsou udrzovany online, takze to nemusi byt vzdy presne, lze
to pouzit jen k pribliznemu zjisteni.

Tomas Zalesak

> -----Original Message-----
> From: Malecek Ondrej [mailto:ondrej.malecek@radom-cz.cz]
> Sent: Monday, May 31, 2004 9:54 AM
> To: delphi-l@clexpert.cz
> Subject: Re: Pocet zaznamu v tabulce v MS SQL
>
>
> Pak delam nekde zasadni chybu, protoze SELECT COUNT(*) FROM
> XXX na tabulce s cca 10000000 zaznamu mi trva cca 20 minut,
> pricemz soucasne nebezi zadny jiny dotaz.
>
> Ondrej
>
> > -----Puvodni zprava-----
> > Od: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]za
> > u?ivatele Tyslic Jiri
> > Odeslano: 31. kvitna 2004 9:44
> > Komu: delphi-l@clexpert.cz
> > P?edmit: Re: Pocet zaznamu v tabulce v MS SQL
> >
> >
> > Ja myslim ze prave ten select count(*) from xxx musi byt velice
> > rychly, protoze pokud si dobre vzpominam, tak MS SQL tyto zaznamy
> > nebude scitat, ale podiva se do systemove tabulky, kde je pocet
> > zaznamu pro danou tabulku.
> > Doufam, ze mluvim pravdu  
> >
> > Jirka
> >
> > > -----Original Message-----
> > > From: Malecek Ondrej [mailto:ondrej.malecek@radom-cz.cz]
> > > Sent: Monday, May 31, 2004 9:28 AM
> > > To: delphi-l@clexpert.cz
> > > Subject: OT: Pocet zaznamu v tabulce v MS SQL
> > >
> > >
> > > Potreboval bych zjistit pocet zaznamu v tabulce v MS SQL
> > > serveru. SELECT
> > > COUNT(*) FROM XXX je nepouzitelne z duvodu vysokeho poctu
> > > zaznamu. Zrejme se pocet zaznamu da zjistit jeste nejakym
> > > jinym zpusobem, protoze administracni konzole ho ma k
> > > dispozici velmi rychle. Vite nekdo o necem pouzitelnem ?
> > >
> > > Diky Ondrej